
c= 127920307084611440387483622092514024727640341163378180961814989720890005402140221437055114769322535871722710161328242949530290260103266825265156965377673759658578325758868729075437311263613086114754165875298689440061892414982970093006369638269890377530529947585943478257832251842545290081817093690228466165887
n= 135817608269251795003011570683678069604785699531916100090612604501141284845088170311710614232920970564187488741545510450496461714239247010686609114805527034299543957362793848355141980117200314770864587999092614921851154260157718763106944530842830535203652330609589617546857308577313340302320959944780922793753
x=2293
e=65537

import gmpy2
import libnum

p1,s=gmpy2.iroot(n,2)
q=gmpy2.next_prime(p1)
p=n//q
print(n==p*q)
d=libnum.invmod(e,(p-1)*(q-1))
m1=pow(c,d,n)

# m1=m*(p-x)!%p
# #需要把p-x 累计乘上去，一直为 (p-2)！
# m1*(p-x+1)=m*(p-x)*(p-x+1)!%p
# m1*(p-x+1)..(p-2)=m*(p-x)!*(p-x+1)...(p-2)%p
# m1*(p-x+1)..(p-2)=m*(p-2)!%p
# #(p-2)!%p=1
# m1*(p-x+1)..(p-2)=m

for i in range(p-x+1,p-1):
    m=(m1*i)%p
    m1=m
print(m)
print(libnum.n2s(int(m)))
